package com.company.hrmadmin.modules.service;

import com.company.hrmadmin.modules.domain.LoginAuthor;
import com.baomidou.mybatisplus.extension.service.IService;
import com.company.hrmadmin.modules.domain.User;
import com.company.hrmadmin.modules.entity.dto.login.UserLoginDTO;
import com.company.hrmadmin.modules.entity.dto.profile.UpdatePasswordDTO;
import com.company.hrmadmin.modules.entity.dto.profile.UpdateProfileDTO;
import com.company.hrmadmin.modules.entity.vo.UserInfoVO;

import javax.servlet.http.HttpServletResponse;

/**
 * @author Xmirror
 * @description 针对表【sys_login_author(登录授权)】的数据库操作Service
 * @createDate 2022-03-18 15:39:37
 */
public interface LoginAuthorService extends IService<LoginAuthor> {

    /**
     * 用户登录
     *
     * @param dto 用户登录DTO对象
     * @return User实体对象
     */
    String login(UserLoginDTO dto);

    /**
     * 根据登录信息得知登录授权信息
     *
     * @param loginAccount 登录账号
     * @return 登录授权表
     */
    LoginAuthor getByAccount(String loginAccount);

    /**
     * 根据登录账号获取用户
     *
     * @param loginAccount 登录账号
     * @return User
     */
    User getUserByAccount(String loginAccount);

    /**
     * 更新密码
     *
     * @param dto 用户更新密码DTO对象
     * @return 更新的行数，默认为 1
     */
    Integer updatePassword(UpdatePasswordDTO dto);

    /**
     * 登录之后，根据用户token获取用户信息
     *
     * @param token token
     * @return 用户信息VO
     */
    UserInfoVO getUserInfo(String token);

    /**
     * 用户更新手机号和邮箱，需要修改用户表和登录权限表
     *
     * @param dto dto对象
     * @return 修改的行数
     */
    Integer updateProfile(UpdateProfileDTO dto);

    /**
     * 插入新的登录账号
     *
     * @param account 登录账号
     * @param userId  用户ID
     * @return 返回值
     */
    Integer insertLoginAccount(String account, Integer userId);

    /**
     * 生成所有登录账号
     *
     * @return 生成的数量
     */
    Integer generatorLoginAccount();

    /**
     * 用户登出
     * @param token 需要用户提供Token值
     */
    void logout(String token);

}
